<!DOCTYPE html>
<html>
<!--
Copyright 2011 The Closure Library Authors. All Rights Reserved.

Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<!--
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.style.transition</title>
<script src="../base.js"></script>
<script>
  goog.require('goog.style.transition');
  goog.require('goog.testing.jsunit');
  goog.require('goog.userAgent');
</script>
</head>
<body>
<script>

/** Fake element. */
var element;


function setUp() {
  element = {'style': {}};
}


function testSetWithNoProperty() {
  try {
    goog.style.transition.set(element, []);
  } catch (e) {
    return;
  }
  fail('Should fail when no property is given.');
}


function testSetWithString() {
  goog.style.transition.set(element, 'opacity 1s ease-in 0.125s');
  assertEquals('opacity 1s ease-in 0.125s', element.style.WebkitTransition);
  assertEquals('opacity 1s ease-in 0.125s', element.style.MozTransition);
  assertEquals('opacity 1s ease-in 0.125s', element.style.OTransition);
}


function testSetWithSingleProperty() {
  goog.style.transition.set(element,
      {property: 'opacity', duration: 1, timing: 'ease-in', delay: 0.125});
  assertEquals('opacity 1s ease-in 0.125s', element.style.WebkitTransition);
  assertEquals('opacity 1s ease-in 0.125s', element.style.MozTransition);
  assertEquals('opacity 1s ease-in 0.125s', element.style.OTransition);
}


function testSetWithMultipleStrings() {
  goog.style.transition.set(element, [
    'width 1s ease-in',
    'height 0.5s linear 1s'
  ]);
  assertEquals('width 1s ease-in,height 0.5s linear 1s',
      element.style.WebkitTransition);
  assertEquals('width 1s ease-in,height 0.5s linear 1s',
      element.style.MozTransition);
  assertEquals('width 1s ease-in,height 0.5s linear 1s',
      element.style.OTransition);
}


function testSetWithMultipleProperty() {
  goog.style.transition.set(element, [
    {property: 'width', duration: 1, timing: 'ease-in', delay: 0},
    {property: 'height', duration: 0.5, timing: 'linear', delay: 1}
  ]);
  assertEquals('width 1s ease-in 0s,height 0.5s linear 1s',
      element.style.WebkitTransition);
  assertEquals('width 1s ease-in 0s,height 0.5s linear 1s',
      element.style.MozTransition);
  assertEquals('width 1s ease-in 0s,height 0.5s linear 1s',
      element.style.OTransition);
}


function testRemoveAllForWebkit() {
  element.style.WebkitTransition = 'opacity 1s ease-in';
  goog.style.transition.removeAll(element);
  assertEquals('', element.style.WebkitTransition);
}


function testRemoveAllForGecko() {
  element.style.MozTransition = 'opacity 1s ease-in';
  goog.style.transition.removeAll(element);
  assertEquals('', element.style.MozTransition);
}


function testRemoveAllForOpera() {
  element.style.OTransition = 'opacity 1s ease-in';
  goog.style.transition.removeAll(element);
  assertEquals('', element.style.OTransition);
}


function testSanityDetectionOfCss3Transition() {
  var support = goog.style.transition.isSupported();

  // No current IE browser supports CSS3 transition.
  if (goog.userAgent.IE) {
    assertFalse(support);
  }

  // FF supports start at FF4 (Gecko 2.0)
  if (goog.userAgent.GECKO) {
    assertEquals(goog.userAgent.isVersion('2.0'), support);
  }

  // Webkit support has existed for a long time, we assume support on
  // most webkit version in used today.
  if (goog.userAgent.WEBKIT) {
    assertTrue(support);
  }
}

</script>

</body>
</html>
